package com.slz3.business.module.afterSaleManagement.aftApplyOrder.service;

import com.slz3.business.module.afterSaleManagement.aftApplyOrder.domain.AftApplyOrder;
import org.springframework.data.domain.Page;
import org.springframework.util.MultiValueMap;

import java.util.List;
import java.util.Optional;
import java.util.UUID;

/**
 * 非事务型 service
 */
public interface AftApplyOrderService {

    AftApplyOrder save(AftApplyOrder aftApplyOrder);

    Page<AftApplyOrder> page(MultiValueMap<String,String> queryParams);

    AftApplyOrder modify(AftApplyOrder aftApplyOrder);

    Optional<AftApplyOrder> single(UUID uuid);

    List<AftApplyOrder> findAllByUuids(Iterable<UUID> uuids);

    List<AftApplyOrder> delete(List<AftApplyOrder> aftApplyOrderList);

    /**
     *  手动同步redis中同步失败的消息
     *  AftApplyOrder: 售后管理 / 售后申请管理
     *  v1.0 期间使用
     *  redis 售后申请【同步队列】记录在：Sync:Order:ApplyAfterSaleRefund 下
     *  pg 售后【同步后】记录在 AftApplyOrder（售后申请）中 and AftApplyOrderLine（售后申请行）中
     *  <p>
     *  核心功能【sync】
     *  <p>
     *  sync：调用【sync】,手动同步redis中同步失败的售后申请记录
     *  <p>
     *  sync：
     *  1 获取全部【售后消息队列中的记录UUId】售后记录 ::afterSaleUuidList
     *  2 执行同步方法【售后同步】将售后记录同步到pg 中 ;
     *  3 同步完成将队列中的记录及补偿队列中的记录删除
     *  4 获取补偿队列中的记录uuid 赋值给 afterSaleUuidList
     *  5 再次进行消费 直到补偿队列中的售后记录被消费完
     */
    void sync();

}
